// utils/ip/get_addr.go
package ip

import (
	"muziai-server/global"
	"net"
)

func GetAddr(ip string) string {
	// 判断是不是内网
	// 192.168
	// 10.
	// 172.16-172.31
	// 127.0.0.1
	if HasLocalIPAddr(ip) {
		return "内网地址"
	}
	region, err := global.IPSearcher.SearchByStr(ip)
	if err != nil {
		//logrus.Warnf("%s ip地址解析失败 %s", ip, err)
		return "-"
	}
	return region
}

func HasLocalIPAddr(ip string) bool {
	return HasLocalIP(net.ParseIP(ip))
}

// HasLocalIP 检测 IP 地址是否是内网地址
// 通过直接对比ip段范围效率更高
func HasLocalIP(ip net.IP) bool {
	if ip.IsLoopback() {
		return true
	}

	ip4 := ip.To4()
	if ip4 == nil {
		return false
	}

	return ip4[0] == 10 || // 10.0.0.0/8
		(ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31) || // 172.16.0.0/12
		(ip4[0] == 169 && ip4[1] == 254) || // 169.254.0.0/16
		(ip4[0] == 192 && ip4[1] == 168) // 192.168.0.0/16
}
